//导入数据库模块
const mysql = require('mysql');
const db = require('../db/index');
//使用bcrypt.js进行用户密码加密
const bcrypt = require('bcryptjs');
//导入jwt模块,用于生成token
const jwt = require('jsonwebtoken');
//导入jwt配置文件
const jwtconfig = require('../jwt_config/index.js');
 

// 登录与注册路由处理模块
exports.register = (req, res) => {
  //res.send('注册');
  const reginfo = req.body;
  //判断前端传递数据是否为空
  if(!reginfo.account || !reginfo.password){
    return res.cc('用户名或密码不能为空')
  }
  //判断用户是否存在
  const sql = 'select * from users where account = ?';
  db.query(sql, reginfo.account, (err, results) => {
    // 先检查是否有错误
    if(err){
      return res.cc('查询用户失败')
    }
    
    // 确保results存在
    if(!results){
      return res.cc('查询用户信息失败，结果为空')
    }
    
    if(results.length > 0){
      return res.cc('用户已存在')
    }
    
    //对用户密码进行加密
    reginfo.password = bcrypt.hashSync(reginfo.password, 10);
    //将用户信息插入数据库
    //const sql1 = 'insert into users set ?';
    const sql1 = 'insert into users (account, password, identity, create_time, status) values (?, ?, ?, ?, ?)';
    const identity = '用户';
    const createTime = new Date();

    db.query(sql1, {
      account: reginfo.account,
      password: reginfo.password,
      identity: identity,
      create_time: createTime, // 修正列名，使用数据库中实际的字段名
      status: 0
    }, (err, results) => {
      // 先检查是否有错误
      if(err){
        console.error('数据库插入错误:', err);
        return res.cc('注册用户失败: ' + err.message)
      }
      
      // 确保results存在且有affectedRows属性
      if(!results || typeof results.affectedRows === 'undefined'){
        return res.cc('注册用户失败，数据库操作未返回预期结果')
      }
      
      if(results.affectedRows !== 1){
        return res.cc('注册用户失败')
      }
      
      return res.send({
        status: 0,
        message: '注册用户成功'
      })
    })
  })
}
/**
 * 处理用户登录请求
 */
exports.login = (req, res) => {
  const logininfo = req.body;
  //查看数据表中是否存在前端传递的账号
  const sql = 'select * from users where account = ?';
  db.query(sql, logininfo.account, (err, results) => {
    // 添加错误检查
    if(err){
      return res.cc('登录失败')
    }
    
    if(results.length === 0){
      return res.cc('登录失败！账号不存在')
    }
    
    try {
      //解密并验证
      const compareResult = bcrypt.compareSync(logininfo.password, results[0].password);
      if(!compareResult){
        return res.cc('登录失败！密码错误')
      }
      
      //判断账号是否冻结
      if(results[0].status === 1){
        return res.cc('账号已被冻结！')
      }
      
      //生成token - 修复变量名result为results
      const user = {
        ...results[0],
        password: '',
        imageUrl: '',
        createTime: '',
        update_time: ''
      }     
      
      //设置token过期时间为7小时
      const token = jwt.sign(user, jwtconfig.jwtSecreKey, {
        expiresIn: '7h'
      })
      
      //将token返回给前端 - 修复变量名tokenStr为token
      res.send({
        result: results[0],
        status: 0,
        message: '登录成功',
        token: 'Bearer ' + token
      })
    } catch (error) {
      // 捕获并处理所有可能的错误
      res.cc('登录过程中发生错误: ' + error.message)
    }
  })
   
  //res.send('登录');
}